package org.dromara.common.core.constant

import cn.hutool.core.lang.RegexPool

/**
 * 常用正则表达式字符串
 * <p>
 * 常用正则表达式集合，更多正则见: https://any86.github.io/any-rule/
 *
 * @author Feng
 * @updater LikeYouDo
 */
object RegexConstants : RegexPool {
    /**
     * 字典类型必须以字母开头，且只能为（小写字母，数字，下滑线）
     */
    const val DICTIONARY_TYPE: String = "^[a-z][a-z0-9_]*$"

    /**
     * 权限标识必须符合以下格式：
     * 1. 标准格式：xxx:yyy:zzz
     * - 第一部分（xxx）：只能包含字母、数字和下划线（_），不能使用 `*`
     * - 第二部分（yyy）：可以包含字母、数字、下划线（_）和 `*`
     * - 第三部分（zzz）：可以包含字母、数字、下划线（_）和 `*`
     * 2. 允许空字符串（""），表示没有权限标识
     */
    const val PERMISSION_STRING: String = "^$|^[a-zA-Z0-9_]+:[a-zA-Z0-9_*]+:[a-zA-Z0-9_*]+$"

    /**
     * 身份证号码（后6位）
     */
    const val ID_CARD_LAST_6: String = "^(([0-2][1-9])|10|20|30|31)\\d{3}[0-9Xx]$"

    /**
     * QQ号码
     */
    const val QQ_NUMBER: String = "^[1-9][0-9]\\d{4,9}$"

    /**
     * 邮政编码
     */
    const val POSTAL_CODE: String = "^[1-9]\\d{5}$"

    /**
     * 注册账号
     */
    const val ACCOUNT: String = "^[a-zA-Z][a-zA-Z0-9_]{4,15}$"

    /**
     * 密码：包含至少8个字符，包括大写字母、小写字母、数字和特殊字符
     */
    const val PASSWORD: String = "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[@$!%*?&])[A-Za-z\\d@$!%*?&]{8,}$"

    /**
     * 通用状态（0表示正常，1表示停用）
     */
    const val STATUS: String = "^[01]$"
}
